package NiuKe.JianZhiOffer;

import java.util.ArrayList;
import java.util.List;

public class JZ19 {


    public static void main(String[] args) {
        JZ19 s = new JZ19();
        int [][]a ={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
        ArrayList<Integer> ll = s.printMatrix(a);
        for (Integer i: ll
             ) {
            System.out.println(i);
        }
    }

    static  ArrayList<Integer> list = new ArrayList<Integer>();
    public ArrayList<Integer> printMatrix(int [][] matrix) {

        JZ19 s = new JZ19();
        int a = 0;
        int b = matrix.length-1;
        int c = 0;
        int d = matrix[0].length-1;

  /*      if( b == 0 && d == 0){
            list.add(matrix[0][0]);
            return list;
        }else if (b == 0){
            for(int i = c ; i <= d ; i++ ){
                list.add(matrix[a][i]);
            }
            return list;
        }else if (d == 0){
            for(int i = a ; i <= b ; i++ ){
                list.add(matrix[i][d]);
            }
            return list;
        }*/

        while (true){

            if(a > b || c > d ){
                break;
            }

            if(a == b && c == d ){
                list.add(matrix[a][c]);
                break;
            }else if(a == b ) {
                for(int i = c ; i <= d ; i++ ){
                    list.add(matrix[a][i]);
                }
            }else if(c == d ){
                for(int i = a ; i <= b ; i++ ){
                    list.add(matrix[i][d]);
                }
            }else
            {
                s.getRound(a , b, c , d ,matrix);
            }
            a++;
            c++;
            b--;
            d--;
        }

        return list;
    }


    // a b c d 分别表示这一次时钟圈内的最低位的数组下标和最高位的数组下标
    public void getRound (int a , int b , int c , int d , int [][]array){
        for(int i = c ; i < d ; i++ ){
            list.add(array[a][i]);
        }

        for(int i = a ; i < b ; i++ ){
            list.add(array[i][d]);
        }

        for(int i = d ; i > c ; i-- ){
            list.add(array[b][i]);
        }

        for(int i = b ; i > a ; i-- ){
            list.add(array[i][c]);
        }

    }

}
